<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>

</body>
<script>
    /*
      proxy的作用：
                1、代理
                2、解决跨域
    */
    let car = { price: 100000, color: 'white', power: 'v8' }
    // console.log(car['price']);
    /* 
       第一个参数：要代理的对象
       第二个参数：对象，对象里有很多方法
    */
    let proxyCar = new Proxy(car, {
        get(target, property) {
            // target  代理的对象
            // property 属性名
            // console.log(target, property);
            if (property == 'price') {
                return '车是120000，但是可以给你优惠，给你15000的优惠，车就是105000'
            } else {
                return target[property]
            }
        },
        // value 需要改变的值
        set(tartget, property, value) {
            // console.log(tartget, property, value);
            tartget[property] = value
        },
        // ownKeys拦截操作，拦截过滤Object.keys()对对象的属性遍历。
        ownKeys() {
            return ['price', 'color']
        },
        // has( )拦截操作：拦截key in object的操作，结果会返回一个布尔值。
        has(tartget, property) {
            // console.log(tartget[property]);
            // console.log(tartget, property);
            if (tartget[property] === undefined) {
                return false
            }
            return true
        }
    })
    console.log(proxyCar.price);
    console.log(proxyCar.color);
    proxyCar.color = 'black'
    console.log(proxyCar.color);
    console.log(Object.keys(proxyCar));
    // key in object  判断属性是否存在对象中
    console.log('price' in proxyCar);
    console.log('price1' in proxyCar);

    let fn = () => {
        console.log('‘我是箭头函树');
    }

    let fn_1 = new Proxy(fn, {
        apply() {
            console.log('我是代理的');
        }
    })
    fn_1()

    // proxy.revocable方法
    let carProxy = Proxy.revocable(car, {
        get(target, property) {
            return target[property]
        }
    })

    console.log(carProxy);
    console.log(carProxy.proxy.price);
    carProxy.revoke()
    console.log(carProxy.proxy.price);
</script>

</html>